

#ifndef UC_GEAPLN3D_H
#define UC_GEAPLN3D_H

#include "zgecurv3d.h"
#include "zgekvec.h"
#include "zgept3dar.h"
#include "zgevc3dar.h"
#include "zgevec3d.h"
#include "zgepnt3d.h"
#include "zgeplin3d.h"

#pragma pack (push, 8)

class 
GE_DLLEXPIMPORT
UcGeAugPolyline3d : public UcGePolyline3d
{
public:
    UcGeAugPolyline3d();
    UcGeAugPolyline3d(const UcGeAugPolyline3d& apline);
    UcGeAugPolyline3d(const UcGeKnotVector& knots,
                      const UcGePoint3dArray& cntrlPnts,
                      const UcGeVector3dArray& vecBundle);
    UcGeAugPolyline3d(const UcGePoint3dArray& cntrlPnts,
                      const UcGeVector3dArray& vecBundle);

    UcGeAugPolyline3d(const UcGeCurve3d& curve,
                      double fromParam, double toParam, 
		              double apprEps);

    UcGeAugPolyline3d& operator = (const UcGeAugPolyline3d& apline);

    UcGePoint3d           getPoint(int idx) const;
    UcGeAugPolyline3d&    setPoint(int idx, UcGePoint3d pnt);
    void                  getPoints(UcGePoint3dArray& pnts) const;

    UcGeVector3d          getVector(int idx) const;
    UcGeAugPolyline3d&    setVector(int idx, UcGeVector3d pnt);
    void                  getD1Vectors(UcGeVector3dArray& tangents) const;

    UcGeVector3d          getD2Vector(int idx) const;
    UcGeAugPolyline3d&    setD2Vector(int idx, UcGeVector3d pnt);
    void                  getD2Vectors(UcGeVector3dArray& d2Vectors) const;

	double                approxTol      () const;
    UcGeAugPolyline3d&    setApproxTol   (double approxTol);

};

#pragma pack (pop)
#endif
